home *** CD-ROM | disk | FTP | other *** search
/ Aminet 16 / Aminet 16 (1996)(GTI - Schatztruhe)[!][Dec 1996].iso / Aminet / comm / term / term_source.lha / Extras / Source / term-source.lha / MacroPanel.c < prev    next >
C/C++ Source or Header  |  1996-10-20  |  8KB  |  376 lines

  1. /*
  2. **    MacroPanel.c
  3. **
  4. **    Editing panel for key macro configuration
  5. **
  6. **    Copyright © 1990-1996 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. **
  9. **    :ts=4
  10. */
  11.  
  12. #ifndef _GLOBAL_H
  13. #include "Global.h"
  14. #endif
  15.  
  16. enum    {    GAD_QUALIFIER=1,GAD_F1,GAD_F2,GAD_F3,GAD_F4,GAD_F5,GAD_F6,GAD_F7,
  17.             GAD_F8,GAD_F9,GAD_F10,GAD_USE,GAD_LOAD,GAD_SAVE,GAD_CANCEL,
  18.             GAD_DISCARD
  19.         };
  20.  
  21. BOOL
  22. MacroPanelConfig(struct Configuration *LocalConfig,struct MacroKeys *MacroKeys,STRPTR LastMacros,struct Window *Parent,BOOL *ChangePtr)
  23. {
  24.     struct MacroKeys *Keys;
  25.     BOOL Changed;
  26.  
  27.     Changed = FALSE;
  28.  
  29.     if(Keys = (struct MacroKeys *)AllocVecPooled(sizeof(struct MacroKeys),MEMF_ANY))
  30.     {
  31.         struct LayoutHandle *Handle;
  32.  
  33.         CopyMem(MacroKeys,Keys,sizeof(struct MacroKeys));
  34.  
  35.         if(Handle = LT_CreateHandleTags(Parent->WScreen,
  36.             LAHN_LocaleHook,    &LocaleHook,
  37.         TAG_DONE))
  38.         {
  39.             struct Window *PanelWindow;
  40.  
  41.             LT_New(Handle,
  42.                 LA_Type,VERTICAL_KIND,
  43.             TAG_DONE);
  44.             {
  45.                 LT_New(Handle,
  46.                     LA_Type,VERTICAL_KIND,
  47.                 TAG_DONE);
  48.                 {
  49.                     LT_New(Handle,
  50.                         LA_Type,        CYCLE_KIND,
  51.                         LA_LabelID,        MSG_MACROPANEL_KEY_MODIFIER_GAD,
  52.                         LA_ID,            GAD_QUALIFIER,
  53.                         LACY_TabKey,    TRUE,
  54.                         LACY_FirstLabel,MSG_MACROPANEL_NONE_TXT,
  55.                         LACY_LastLabel,    MSG_MACROPANEL_CONTROL_TXT,
  56.                     TAG_DONE);
  57.  
  58.                     LT_New(Handle,
  59.                         LA_Type,        XBAR_KIND,
  60.                     TAG_DONE);
  61.  
  62.                     LT_EndGroup(Handle);
  63.                 }
  64.  
  65.                 LT_New(Handle,
  66.                     LA_Type,VERTICAL_KIND,
  67.                 TAG_DONE);
  68.                 {
  69.                     STATIC STRPTR Labels[10] =
  70.                     {
  71.                         "F _1",
  72.                         "F _2",
  73.                         "F _3",
  74.                         "F _4",
  75.                         "F _5",
  76.                         "F _6",
  77.                         "F _7",
  78.                         "F _8",
  79.                         "F _9",
  80.                         "F1_0"
  81.                     };
  82.  
  83.                     LONG i;
  84.  
  85.                     for(i = 0 ; i < 10 ; i++)
  86.                     {
  87.                         LT_New(Handle,
  88.                             LA_Type,        STRING_KIND,
  89.                             LA_LabelText,    Labels[i],
  90.                             LA_Chars,        39,
  91.                             LA_ID,            GAD_F1 + i,
  92.                             GTST_MaxChars,    structsizeof(MacroKeys,Keys[0][0]) - 1,
  93.                         TAG_DONE);
  94.                     }
  95.  
  96.                     LT_EndGroup(Handle);
  97.                 }
  98.  
  99.                 LT_New(Handle,
  100.                     LA_Type,VERTICAL_KIND,
  101.                 TAG_DONE);
  102.                 {
  103.                     LT_New(Handle,
  104.                         LA_Type,        XBAR_KIND,
  105.                         LAXB_FullSize,    TRUE,
  106.                     TAG_DONE);
  107.  
  108.                     LT_EndGroup(Handle);
  109.                 }
  110.  
  111.                 LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  112.                     LAGR_SameSize,    TRUE,
  113.                     LAGR_Spread,    TRUE,
  114.                 TAG_DONE);
  115.                 {
  116.                     LT_New(Handle,
  117.                         LA_Type,        BUTTON_KIND,
  118.                         LA_LabelID,        MSG_GLOBAL_USE_GAD,
  119.                         LA_ID,            GAD_USE,
  120.                         LABT_ReturnKey,    TRUE,
  121.                         LABT_ExtraFat,    TRUE,
  122.                     TAG_DONE);
  123.  
  124.                     LT_New(Handle,
  125.                         LA_Type,        BUTTON_KIND,
  126.                         LA_LabelID,        MSG_GLOBAL_LOAD_GAD,
  127.                         LA_ID,            GAD_LOAD,
  128.                     TAG_DONE);
  129.  
  130.                     LT_New(Handle,
  131.                         LA_Type,        BUTTON_KIND,
  132.                         LA_LabelID,        MSG_GLOBAL_SAVE_GAD,
  133.                         LA_ID,            GAD_SAVE,
  134.                     TAG_DONE);
  135.  
  136.                     LT_New(Handle,
  137.                         LA_Type,        BUTTON_KIND,
  138.                         LA_LabelID,        MSG_DISCARD_GAD,
  139.                         LA_ID,            GAD_DISCARD,
  140.                     TAG_DONE);
  141.  
  142.                     LT_New(Handle,
  143.                         LA_Type,        BUTTON_KIND,
  144.                         LA_LabelID,        MSG_GLOBAL_CANCEL_GAD,
  145.                         LA_ID,            GAD_CANCEL,
  146.                         LABT_EscKey,    TRUE,
  147.                     TAG_DONE);
  148.  
  149.                     LT_EndGroup(Handle);
  150.                 }
  151.  
  152.                 LT_EndGroup(Handle);
  153.             }
  154.  
  155.             if(PanelWindow = LT_Build(Handle,
  156.                 LAWN_TitleID,        MSG_MACROPANEL_MACRO_PREFERENCES_TXT,
  157.                 LAWN_HelpHook,        &GuideHook,
  158.                 LAWN_Parent,        Parent,
  159.                 WA_DepthGadget,        TRUE,
  160.                 WA_DragBar,            TRUE,
  161.                 WA_RMBTrap,            TRUE,
  162.                 WA_Activate,        TRUE,
  163.                 WA_SimpleRefresh,    TRUE,
  164.             TAG_DONE))
  165.             {
  166.                 UBYTE DummyBuffer[MAX_FILENAME_LENGTH];
  167.                 struct FileRequester *FileRequest;
  168.                 struct IntuiMessage *Message;
  169.                 struct Gadget *MsgGadget;
  170.                 LONG Modifier,i;
  171.                 ULONG MsgClass;
  172.                 UWORD MsgCode;
  173.                 BOOL Done;
  174.  
  175.                 GuideContext(CONTEXT_MACROS);
  176.  
  177.                 PushWindow(PanelWindow);
  178.  
  179.                 LT_ShowWindow(Handle,TRUE);
  180.  
  181.                 Modifier = 0;
  182.  
  183.                 if(XEmulatorBase && LocalConfig && LocalConfig->TerminalConfig->EmulationMode == EMULATION_EXTERNAL)
  184.                 {
  185.                     ULONG KeyMask = XEmulatorGetFreeMacroKeys(XEM_IO,Modifier);
  186.  
  187.                     for(i = 0 ; i < 10 ; i++)
  188.                     {
  189.                         LT_SetAttributes(Handle,GAD_F1 + i,
  190.                             GTST_String,    Keys->Keys[Modifier][i],
  191.                             GA_Disabled,    !(KeyMask & (1L << i)),
  192.                         TAG_DONE);
  193.                     }
  194.                 }
  195.                 else
  196.                 {
  197.                     for(i = 0 ; i < 10 ; i++)
  198.                     {
  199.                         LT_SetAttributes(Handle,GAD_F1 + i,
  200.                             GTST_String,Keys->Keys[Modifier][i],
  201.                         TAG_DONE);
  202.                     }
  203.                 }
  204.  
  205.                 Done = FALSE;
  206.  
  207.                 do
  208.                 {
  209.                     if(Wait(PORTMASK(PanelWindow->UserPort) | SIG_BREAK) & SIG_BREAK)
  210.                         break;
  211.  
  212.                     while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  213.                     {
  214.                         MsgClass    = Message->Class;
  215.                         MsgCode        = Message->Code;
  216.                         MsgGadget    = (struct Gadget *)Message->IAddress;
  217.  
  218.                         LT_ReplyIMsg(Message);
  219.  
  220.                         if(MsgClass == IDCMP_GADGETUP)
  221.                         {
  222.                             switch(MsgGadget->GadgetID)
  223.                             {
  224.                                 case GAD_QUALIFIER:
  225.  
  226.                                     for(i = 0 ; i < 10 ; i++)
  227.                                         strcpy(Keys->Keys[Modifier][i],LT_GetString(Handle,GAD_F1 + i));
  228.  
  229.                                     Modifier = MsgCode;
  230.  
  231.                                     if(XEmulatorBase && LocalConfig && LocalConfig->TerminalConfig->EmulationMode == EMULATION_EXTERNAL)
  232.                                     {
  233.                                         ULONG KeyMask = XEmulatorGetFreeMacroKeys(XEM_IO,Modifier);
  234.  
  235.                                         for(i = 0 ; i < 10 ; i++)
  236.                                         {
  237.                                             LT_SetAttributes(Handle,GAD_F1 + i,
  238.                                                 GTST_String,    Keys->Keys[Modifier][i],
  239.                                                 GA_Disabled,    !(KeyMask & (1L << i)),
  240.                                             TAG_DONE);
  241.                                         }
  242.                                     }
  243.                                     else
  244.                                     {
  245.                                         for(i = 0 ; i < 10 ; i++)
  246.                                         {
  247.                                             LT_SetAttributes(Handle,GAD_F1 + i,
  248.                                                 GTST_String,Keys->Keys[Modifier][i],
  249.                                             TAG_DONE);
  250.                                         }
  251.                                     }
  252.  
  253.                                     break;
  254.  
  255.                                 case GAD_USE:
  256.  
  257.                                     LT_LockWindow(PanelWindow);
  258.  
  259.                                     for(i = 0 ; i < 10 ; i++)
  260.                                         strcpy(Keys->Keys[Modifier][i],LT_GetString(Handle,GAD_F1 + i));
  261.  
  262.                                     CopyMem(Keys,MacroKeys,sizeof(struct MacroKeys));
  263.  
  264.                                     Changed = TRUE;
  265.  
  266.                                     if(ChangePtr)
  267.                                         *ChangePtr |= TRUE;
  268.  
  269.                                     Done = TRUE;
  270.                                     break;
  271.  
  272.                                 case GAD_LOAD:
  273.  
  274.                                     strcpy(DummyBuffer,LastMacros);
  275.  
  276.                                     LT_LockWindow(PanelWindow);
  277.  
  278.                                     if(FileRequest = OpenSingleFile(PanelWindow,LocaleString(MSG_MACROPANEL_LOAD_MACRO_KEYS_TXT),NULL,"#?.prefs",DummyBuffer,sizeof(DummyBuffer)))
  279.                                     {
  280.                                         FreeAslRequest(FileRequest);
  281.  
  282.                                         if(!LoadMacros(DummyBuffer,Keys))
  283.                                             ShowError(PanelWindow,ERR_LOAD_ERROR,IoErr(),DummyBuffer);
  284.                                         else
  285.                                         {
  286.                                             Changed = TRUE;
  287.  
  288.                                             if(ChangePtr)
  289.                                                 *ChangePtr = FALSE;
  290.  
  291.                                             strcpy(LastMacros,DummyBuffer);
  292.  
  293.                                             if(LocalConfig)
  294.                                                 strcpy(LocalConfig->MacroFileName,LastMacros);
  295.  
  296.                                             for(i = 0 ; i < 10 ; i++)
  297.                                             {
  298.                                                 LT_SetAttributes(Handle,GAD_F1 + i,
  299.                                                     GTST_String,Keys->Keys[Modifier][i],
  300.                                                 TAG_DONE);
  301.                                             }
  302.                                         }
  303.                                     }
  304.  
  305.                                     LT_UnlockWindow(PanelWindow);
  306.  
  307.                                     break;
  308.  
  309.                                 case GAD_SAVE:
  310.  
  311.                                     strcpy(DummyBuffer,LastMacros);
  312.  
  313.                                     LT_LockWindow(PanelWindow);
  314.  
  315.                                     for(i = 0 ; i < 10 ; i++)
  316.                                         strcpy(Keys->Keys[Modifier][i],LT_GetString(Handle,GAD_F1 + i));
  317.  
  318.                                     if(FileRequest = SaveFile(PanelWindow,LocaleString(MSG_MACROPANEL_SAVE_MACRO_KEYS_TXT),NULL,"#?.prefs",DummyBuffer,sizeof(DummyBuffer)))
  319.                                     {
  320.                                         FreeAslRequest(FileRequest);
  321.  
  322.                                         if(!WriteIFFData(DummyBuffer,Keys,sizeof(struct MacroKeys),ID_KEYS))
  323.                                             ShowError(PanelWindow,ERR_SAVE_ERROR,IoErr(),DummyBuffer);
  324.                                         else
  325.                                         {
  326.                                             strcpy(LastMacros,DummyBuffer);
  327.  
  328.                                             if(LocalConfig)
  329.                                                 strcpy(LocalConfig->MacroFileName,LastMacros);
  330.  
  331.                                             if(ChangePtr)
  332.                                                 *ChangePtr = FALSE;
  333.                                         }
  334.                                     }
  335.  
  336.                                     LT_UnlockWindow(PanelWindow);
  337.  
  338.                                     break;
  339.  
  340.                                 case GAD_DISCARD:
  341.  
  342.                                     Done = Changed = TRUE;
  343.  
  344.                                     if(ChangePtr)
  345.                                         *ChangePtr = FALSE;
  346.  
  347.                                     LastMacros[0] = 0;
  348.  
  349.                                     if(LocalConfig)
  350.                                         strcpy(LocalConfig->MacroFileName,LastMacros);
  351.  
  352.                                     break;
  353.  
  354.                                 case GAD_CANCEL:
  355.  
  356.                                     Done = TRUE;
  357.                                     Changed = FALSE;
  358.                                     break;
  359.                             }
  360.                         }
  361.                     }
  362.                 }
  363.                 while(!Done);
  364.  
  365.                 PopWindow();
  366.             }
  367.  
  368.             LT_DeleteHandle(Handle);
  369.         }
  370.  
  371.         FreeVecPooled(Keys);
  372.     }
  373.  
  374.     return(Changed);
  375. }
  376.